package com.zombieprogrammer.pantallas;

import java.util.ArrayList;

import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.Input.Keys;
import com.badlogic.gdx.graphics.GL20;
import com.badlogic.gdx.graphics.OrthographicCamera;
import com.badlogic.gdx.physics.box2d.World;
import com.badlogic.gdx.scenes.scene2d.Stage;
import com.badlogic.gdx.utils.viewport.FitViewport;
import com.zombieprogrammer.hub_visuales.Contenedor;
import com.zombieprogrammer.hub_visuales.Hub;
import com.zombieprogrammer.juego.Creador_Randmonster;
import com.zombieprogrammer.juego.Estadio;
import com.zombieprogrammer.juego.Juego_Base;

public class Pantalla_Seleccion extends Pantalla {

	// CONSTANTES
	private static final int VELOCITYITERATIONS = 6;
	private static final float TIMESTEP = 1 / 60f;
	private static final int POSITIONINTERATIONS = 2;

	// VARIABLES
	// private Texture img;
	// Pantalla

	private OrthographicCamera camara_fisica;
	private OrthographicCamera camara_viewport;
	private int ancho = juego_base.ancho;
	private int alto = juego_base.alto;
	private float PPM;
	private Creador_Randmonster dios;
	private World mundo_fisico;
	private Estadio estadio;
	private Contenedor contenedor;
	private ArrayList<Contenedor> contenedores = new ArrayList<Contenedor>();

	// Constructor

	public Pantalla_Seleccion(Juego_Base juego_base) {
		super(juego_base);

	}

	// METODOS OVERIDE

	@Override
	public void show() {

		juego_base.PPM = 5;
		PPM = this.juego_base.PPM;
		dios = juego_base.dios;
		camara_fisica = new OrthographicCamera(ancho / PPM, alto / PPM);
		camara_viewport = new OrthographicCamera(ancho / zoom, alto / zoom);
		mundo_fisico = juego_base.mundo_fisico;
		escenario = new Stage(new FitViewport(ancho, alto, camara_viewport));
		// crearestadio();
		estadio = new Estadio(50, 50, 330, 950, this);
		escenario.addActor(estadio);

		contenedor = new Contenedor(50, 600, 100, 100, this);
		escenario.addActor(contenedor);
		contenedores.add(contenedor);

		contenedor = new Contenedor(170, 500, 100, 100, this);
		escenario.addActor(contenedor);
		contenedores.add(contenedor);

		contenedor = new Contenedor(290, 550, 100, 100, this);
		escenario.addActor(contenedor);
		contenedores.add(contenedor);

		contenedor = new Contenedor(410, 400, 100, 100, this);
		escenario.addActor(contenedor);
		contenedores.add(contenedor);

		contenedor = new Contenedor(530, 500, 100, 100, this);
		escenario.addActor(contenedor);
		contenedores.add(contenedor);

		Hub hub1 = new Hub(this);
		juego_base.hub = hub1;
		escenario.addActor(hub1);
		dios.crear_randmonster(10, escenario, true);

		Gdx.input.setInputProcessor(escenario);

	}

	@Override
	public void render(float delta) {
		camara_fisica.update();
		Gdx.gl.glClearColor(0.6f, 0.6f, 0.6f, 1);
		Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
		mundo_fisico.step(TIMESTEP, VELOCITYITERATIONS, POSITIONINTERATIONS);
		escenario.act();
		escenario.draw();

		juego_base.batch.begin();
		juego_base.fuente.draw(juego_base.batch,
				"FPS : " + Gdx.graphics.getFramesPerSecond(),
				juego_base.ancho - 100, juego_base.alto - 300);
		juego_base.batch.end();

		if (Gdx.input.isKeyPressed(Keys.F)) {
			render_fisicas();
		}
		if (Gdx.input.isKeyPressed(Keys.R)) {
			this.dispose();
			System.out.print(juego_base.getScreen().getClass().getName()
					+ "------->");
			juego_base.setPantalla_juego(new Pantalla_Juego(juego_base));
		}

		mov_camara(camara_viewport);

	}

	@Override
	public void resize(int width, int height) {
		escenario.getViewport().update((int) (width), (int) (height));
		camara_fisica.setToOrtho(false, ancho / PPM, alto / PPM);
	}

	@Override
	public void hide() {
		// TODO Auto-generated method stub

	}

	@Override
	public void pause() {
		// TODO Auto-generated method stub

	}

	@Override
	public void resume() {
		// TODO Auto-generated method stub

	}

	@Override
	public void dispose() {
		// TODO Auto-generated method stub

	}

	// Metodos

	public void mov_camara(OrthographicCamera camara) {

		if (Gdx.input.isKeyPressed(Keys.UP)) {
			camara.translate(0, 4);
		} else if (Gdx.input.isKeyPressed(Keys.DOWN)) {
			camara.translate(0, -4);
		}
		if (Gdx.input.isKeyPressed(Keys.LEFT)) {
			camara.translate(-4, 0);
		} else if (Gdx.input.isKeyPressed(Keys.RIGHT)) {
			camara.translate(4, 0);
		}
		if (Gdx.input.isKeyPressed(Keys.A)) {
			camara.zoom += 0.01;
			// System.out.println("aca");
		}
		// if (Gdx.input.isTouched()){
		// camara.zoom -= 0.01;
		// System.out.println("aca");
		// }
		else if (Gdx.input.isKeyPressed(Keys.Z)) {
			camara.zoom -= 0.01;
		}

	}

	public void render_fisicas() {
		juego_base.render_fisicas.render(mundo_fisico, camara_fisica.combined);
	}

	// GETTERS&SETTERS/

	public ArrayList<Contenedor> getContenedores() {
		return contenedores;
	}

	public void setContenedores(ArrayList<Contenedor> contenedores) {
		this.contenedores = contenedores;
	}

}
